home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_pcdp / ada / philr.ada < prev    next >
Text File  |  1996-01-30  |  1KB  |  44 lines

  1. with Text_IO; use Text_IO;
  2. with Semaphore_Package; use Semaphore_Package;
  3. procedure Philr is
  4.  
  5.   type Node_ID is range 0..4;
  6.  
  7.   Fork: array(Node_ID) of Binary_Semaphore := (others => Init(1));
  8.   Room: Semaphore := Init(4);
  9.  
  10.   task type Nodes is
  11.     entry Init(ID: Node_ID);
  12.   end Nodes;
  13.  
  14.   Node: array(Node_ID) of Nodes;
  15.  
  16.   task body Nodes is
  17.     I:           Node_ID;
  18.   begin
  19.     accept Init(ID: Node_ID) do
  20.       I := ID;
  21.     end Init;
  22.     for M in 1..5 loop
  23.       Put_Line(" " & Node_ID'Image(I) & " thinking");
  24.       Wait(Room);
  25.       Put_Line(" " & Node_ID'Image(I) & " in room");
  26.       Wait(Fork(I));
  27.       Put_Line(" " & Node_ID'Image(I) & " first fork taken");
  28.       Wait(Fork((I+1) mod 5));
  29.       Put_Line(" " & Node_ID'Image(I) & " critical section");
  30.       Signal(Fork(I));
  31.       Put_Line(" " & Node_ID'Image(I) & " first fork released");
  32.       Signal(Fork((I+1) mod 5));
  33.       Put_Line(" " & Node_ID'Image(I) & " second fork released");
  34.       Signal(Room);
  35.       Put_Line(" " & Node_ID'Image(I) & " left room");
  36.     end loop;
  37.   end Nodes;
  38.  
  39. begin
  40.   for J in Node_ID loop
  41.     Node(J).Init(J);
  42.   end loop;
  43. end Philr;
  44.